package com.xcw.test;

import com.xcw.function.normal.ConsumerInter;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Author bhx
 * @Date 2022/8/13 2:54
 * @Description TODO
 */
public class Stream_ {
    public static void main(String[] args) {
        /**
         * 流的第一种写法
         * of 对象
         * 实现排序--过滤
         */
//       Stream
//                .of(1, 2, 3, 4, 56, 7)
//                .filter(num -> num > 1)
//               .limit(3)
//               .sorted((n1, n2)->n1-n2)
//                .collect(Collectors.toList())
//                .forEach(System.out::println);
       // --------------------------------------------------------------------------------------------------
        Stream<Integer> integerStream = Stream
                .of(1, 2, 3, 4, 56, 7);

        BaseData baseData1 = new BaseData();
        BaseData baseData2 = new BaseData();
        BaseData baseData3 = new BaseData();
        BaseData baseData4 = new BaseData();
        BaseData baseData5 = new BaseData();
        BaseData baseData6= new BaseData();
        baseData1.setCount("01").setName("张三").setAge("21");
        baseData2.setCount("02").setName("李四").setAge("22");
        baseData3.setCount("03").setName("王麻子").setAge("24");
        baseData4.setCount("04").setName("王振飞").setAge("21");
        baseData5.setCount("05").setName("齐思硕").setAge("20");
        baseData6.setCount("06").setName("郑俊明").setAge("13");
//        Stream.of(baseData1).forEach(System.out::println);
//        System.out.println(baseData1);

        List<BaseData> baseDataList = new ArrayList<>();
        baseDataList.add(baseData1);
        baseDataList.add(baseData2);
        baseDataList.add(baseData3);

        System.out.println(baseData1.equals(baseData2));
//        baseDataList.stream().map(baseData -> Integer.valueOf(baseData.getAge())).map(age->age + 10).forEach(System.out::println);
//        baseDataList.stream().distinct().sorted((o1, o2) -> Integer.parseInt(o1.getAge()) - Integer.parseInt(o2.getAge())).forEach(System.out::println);
//        baseDataList.stream().distinct().sorted((o1, o2) -> Integer.parseInt(o1.getCount()) - Integer.parseInt(o2.getCount())).forEach(System.out::println);
//        baseDataList.stream().distinct().sorted((o1, o2) -> Integer.parseInt(o1.getCount()) - Integer.parseInt(o2.getCount())).limit(2).skip(1).collect(Collectors.toMap(key,value));
//        System.out.println();
//        Optional<BaseData> max = baseDataList.stream().distinct().sorted((o1, o2) -> Integer.parseInt(o1.getCount()) - Integer.parseInt(o2.getCount()))/*.limit(2).skip(1)*/.max((o1, o2) -> Integer.parseInt(o1.getAge()) - Integer.parseInt(o2.getAge()));
//        System.out.println(max.get().getAge() + max.get().getName());

        // 函数式 中间操作  sorted distinct limit skip
        // 终结操作 max  min count
        // 函数式收集操作： Collectors.toList()  Collectors.toMap(key (Lambda),value(Lambda))
        // 一些方法  anyMatch()  任意匹配  allMatch() 全匹配  noMatch（） 全不匹配  findAny() 任意获取一个 findFirst() 查到第一个
        // 终结操作 reduce
        Optional<BaseData> any = baseDataList.stream().distinct().findAny();
        any.ifPresent(BaseExcel::getAge);
        System.out.println(any.isPresent());
//        1.flatMap 对于List list的值去去处理


    }
}
